home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_08 / beddow / rpcexamp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-02  |  2.0 KB  |  89 lines

  1. /* ********************************* */
  2. /* Transaction Master demo */
  3.  
  4. #include <stdio.h>
  5. #include "netfn.h"
  6.  
  7. struct messout {
  8.        char call[82] ;
  9.        int flag ; } messout ;
  10.  
  11. struct messin {
  12.        char reply[82] ; } messin ;
  13.  
  14.  
  15. main()
  16. {  
  17.    int dgstat;
  18.    char *get_neterrmess() ;
  19.    
  20.    messout.flag = 0 ;
  21.    open_net_client("master") ;                   // Open the client
  22.    strcpy(messout.call,"Sending datagram to rpc server") ;
  23.    printf("Sending message to rpc server\n") ;
  24.    dgstat = NetTransact("rpcserver", messin, messout) ;  // Transact with rpcserver 
  25.    if (dgstat)
  26.     printf("%s\n", get_neterrmess(dgstat)) ;
  27.    else
  28.     { printf("Received reply : %s\n", &messin.reply) ;
  29.       messout.flag = -1 ;
  30.       NetTransact("rpcserver", messin, messout) ;     // Terminate server
  31.     }
  32.    close_net_client() ;
  33. }
  34.  
  35. /* ***************************************************** */
  36. /* RPC server demo */
  37.  
  38. #include <stdio.h>
  39. #include <string.h>
  40. #include "netfn.h"
  41.  
  42.  
  43. /* Message structures must be static */
  44. struct messin {
  45.        char call[82] ;
  46.        int flag ; } ;
  47.  
  48. struct messout {
  49.        char reply[82] ;} messout ;
  50.  
  51. int flag = 0 ;
  52. char *name = "rpcserver" ;
  53.  
  54. /* Remote Procedure */
  55. struct messout *server(struct messin *messptr)
  56. { if (messptr->flag != -1)
  57.     { printf("Message in : %s\n", messptr->call) ;
  58.       strcpy(messout.reply, "Sending reply from rpc server") ;
  59.       printf("Returning reply\n") ;
  60.     }
  61.   else
  62.    { printf("Terminate message issued\n") ;
  63.      flag = messptr->flag ;
  64.    }
  65.   return(&messout) ;
  66. }
  67.  
  68. main()
  69. {    
  70. /* Install destructor */
  71.    atexit(remove_all_rpcservers) ;
  72.  
  73.    if (install_rpcserver(name, (void *)server, sizeof(messout)) == NULL)
  74.      { printf("Cannot add network name %s\n", name) ;
  75.        exit(1) ;
  76.      }  
  77.  
  78.    printf("Starting\n") ;
  79.  
  80.    while(flag != -1)
  81.      net_comms() ;               // Loop round servicing datagrams until terminated
  82.  
  83.    printf("Finish\n") ;
  84. }
  85.  
  86.  
  87.  
  88.  
  89.